/**
 * 分享SDK
 * 统一处理不同平台的分享功能
 */

// 支持的平台类型
const PLATFORMS = {
    WECHAT: 'weixin',         // 微信好友
    MOMENTS: 'wxcircle',      // 微信朋友圈
    QQ: 'qq',                 // QQ好友
    QZONE: 'qzone',           // QQ空间
    WEIBO: 'sinaweibo',       // 新浪微博
    COPY: 'copy',             // 复制链接
    MORE: 'more'              // 更多平台
};

// 分享内容类型
const SHARE_TYPES = {
    TEXT: 0,                  // 文本
    IMAGE: 1,                 // 图片
    MUSIC: 2,                 // 音乐
    VIDEO: 3,                 // 视频
    WEB: 4                    // 网页
};

/**
 * 分享配置
 * @typedef {Object} ShareOptions
 * @property {String} title - 分享标题
 * @property {String} summary - 分享摘要
 * @property {String} imageUrl - 分享图片地址
 * @property {String} mediaUrl - 多媒体文件地址，如音乐、视频链接
 * @property {String} href - 分享链接地址
 * @property {Number} type - 分享类型，见SHARE_TYPES
 */

/**
 * 分享结果回调
 * @callback ShareCallback
 * @param {Boolean} success - 是否成功
 * @param {Object} result - 分享结果详情
 */

/**
 * 统一分享方法
 * @param {String} platform - 分享平台，见PLATFORMS
 * @param {ShareOptions} options - 分享配置
 * @param {ShareCallback} callback - 回调函数
 */
function share(platform, options, callback) {
    // 检查平台是否支持
    if (!Object.values(PLATFORMS).includes(platform)) {
        handleError('不支持的平台类型', callback);
        return;
    }

    // 检查是否有必要参数
    if (!options.title && !options.summary) {
        handleError('分享内容不能为空', callback);
        return;
    }

    // 根据不同平台处理分享
    switch (platform) {
        case PLATFORMS.WECHAT:
        case PLATFORMS.MOMENTS:
            shareToWechat(platform, options, callback);
            break;
        case PLATFORMS.QQ:
        case PLATFORMS.QZONE:
            shareToQQ(platform, options, callback);
            break;
        case PLATFORMS.WEIBO:
            shareToWeibo(options, callback);
            break;
        case PLATFORMS.COPY:
            copyLink(options.href || options.title || options.summary, callback);
            break;
        case PLATFORMS.MORE:
            shareWithSystem(options, callback);
            break;
        default:
            handleError('未知的分享平台', callback);
    }
}

/**
 * 分享到微信
 * @param {String} platform - weixin或wxcircle
 * @param {ShareOptions} options - 分享配置
 * @param {ShareCallback} callback - 回调函数
 */
function shareToWechat(platform, options, callback) {
    const scene = platform === PLATFORMS.MOMENTS ? 'WXSceneTimeline' : 'WXSceneSession';
    
    uni.share({
        provider: 'weixin',
        scene: scene,
        type: options.type || SHARE_TYPES.WEB,
        title: options.title || '',
        summary: options.summary || options.title || '',
        imageUrl: options.imageUrl || '',
        mediaUrl: options.mediaUrl || '',
        href: options.href || '',
        success: (res) => {
            if (callback) callback(true, res);
        },
        fail: (err) => {
            handleError(err, callback);
        }
    });
}

/**
 * 分享到QQ
 * @param {String} platform - qq或qzone
 * @param {ShareOptions} options - 分享配置
 * @param {ShareCallback} callback - 回调函数
 */
function shareToQQ(platform, options, callback) {
    uni.share({
        provider: 'qq',
        type: options.type || SHARE_TYPES.WEB,
        title: options.title || '',
        summary: options.summary || options.title || '',
        imageUrl: options.imageUrl || '',
        href: options.href || '',
        shareType: platform === PLATFORMS.QZONE ? 1 : 0, // 0: QQ好友, 1: QQ空间
        success: (res) => {
            if (callback) callback(true, res);
        },
        fail: (err) => {
            handleError(err, callback);
        }
    });
}

/**
 * 分享到微博
 * @param {ShareOptions} options - 分享配置
 * @param {ShareCallback} callback - 回调函数
 */
function shareToWeibo(options, callback) {
    uni.share({
        provider: 'sinaweibo',
        type: options.type || SHARE_TYPES.WEB,
        title: options.title || '',
        summary: options.summary || options.title || '',
        imageUrl: options.imageUrl || '',
        href: options.href || '',
        success: (res) => {
            if (callback) callback(true, res);
        },
        fail: (err) => {
            handleError(err, callback);
        }
    });
}

/**
 * 复制链接到剪贴板
 * @param {String} content - 要复制的内容
 * @param {ShareCallback} callback - 回调函数
 */
function copyLink(content, callback) {
    if (!content) {
        handleError('复制内容不能为空', callback);
        return;
    }

    uni.setClipboardData({
        data: content,
        success: () => {
            uni.showToast({
                title: '链接已复制',
                icon: 'success'
            });
            if (callback) callback(true, { message: '复制成功' });
        },
        fail: (err) => {
            handleError(err, callback);
        }
    });
}

/**
 * 使用系统分享
 * @param {ShareOptions} options - 分享配置
 * @param {ShareCallback} callback - 回调函数
 */
function shareWithSystem(options, callback) {
    // 系统分享的实现取决于具体平台和需求
    // 这里只做一个简单示例
    uni.shareWithSystem({
        type: 'text',
        summary: options.summary || options.title || '',
        href: options.href || '',
        success: (res) => {
            if (callback) callback(true, res);
        },
        fail: (err) => {
            handleError(err, callback);
        }
    });
}

/**
 * 错误处理
 * @param {Object|String} error - 错误信息
 * @param {ShareCallback} callback - 回调函数
 */
function handleError(error, callback) {
    console.error('[ShareSDK Error]', error);
    
    if (typeof error === 'string') {
        uni.showToast({
            title: error,
            icon: 'none'
        });
    }
    
    if (callback) callback(false, { error });
}

/**
 * 获取分享配置
 * @param {Object} video - 视频对象
 * @returns {ShareOptions} 分享配置
 */
function getShareOptionsFromVideo(video) {
    return {
        title: video.description || '分享一个精彩视频',
        summary: video.description || '分享一个精彩视频',
        imageUrl: video.cover || '',
        href: window.location.href,
        type: SHARE_TYPES.WEB
    };
}

/**
 * 获取所有支持的分享平台列表
 * @returns {Array} 分享平台列表
 */
function getSupportedPlatforms() {
    // 实际应用中，可以根据当前环境判断支持哪些平台
    return [
        {
            id: PLATFORMS.WECHAT,
            name: '微信',
            icon: '💬'  // 微信表情
        },
        {
            id: PLATFORMS.MOMENTS,
            name: '朋友圈',
            icon: '👥'  // 朋友圈表情
        },
        {
            id: PLATFORMS.QQ,
            name: 'QQ',
            icon: '🐧'  // QQ企鹅表情
        },
        {
            id: PLATFORMS.QZONE,
            name: 'QQ空间',
            icon: '🌐'  // 空间表情
        },
        {
            id: PLATFORMS.WEIBO,
            name: '微博',
            icon: '📱'  // 微博表情
        },
        {
            id: PLATFORMS.COPY,
            name: '复制链接',
            icon: '📋'  // 复制表情
        },
        {
            id: PLATFORMS.MORE,
            name: '更多',
            icon: '➕'  // 更多表情
        }
    ];
}

// 导出接口
export default {
    PLATFORMS,
    SHARE_TYPES,
    share,
    getShareOptionsFromVideo,
    getSupportedPlatforms
}; 